<?php
namespace jm\helper;


class Db
{
    public static $redisIns = null;
    public static $mongoIns = null;

    /**
     * @param  $instance 模型实例
     * @param  $haystack 一维的键值对数组
     */
    public static function setAttribute($instance, $haystack, $idField='')
    {
        foreach ($haystack as $key => $value) {
            if ($key === 'account_id') {
                $instance->user_id = $value;
            } else if ($key === $idField) {
                $instance->id = $value;
            } else {
                $instance->{$key} = $value;
            }
        }
    }

    // redis 封装
    public static function getRedisIns()
    {
        if (is_null(self::$redisIns)) {
            $redisInstance = new \Redis();
            $redisInstance->connect(\think\Config::get('redis.host'), \think\Config::get('redis.port'));
            // 服务端不需要密码验证时，这里写出来也没有影响；
            // 配置的值比较随意，可以使任何的随机字符串，也可以是空字符串。
            $redisInstance->auth(\think\Config::get('redis.password'));
            self::$redisIns = $redisInstance;
            return $redisInstance;
        } else {
            return self::$redisIns;
        }
    }

    // 需要的是 json_decode 后的数组；
    public static function isOnline($deviceDecodeInfo = []) {
        if (1 * $deviceDecodeInfo['device_online'] === 0) {
            return 0;
        } else if ((time() - $deviceDecodeInfo['device_loctime'] * 1) > (30 * 60)) {
            // 此时为 1，但还要判断最近一次的定位时间是不是超过了30分钟；
            return 0;
        } else {
            return 1;
        }
    }

    // mongodb 封装
    public static function getMongoIns()
    {
        if (is_null(self::$mongoIns)) {
            // $mongoInstance = new \MongoDB\Driver\Manager('mongodb://'. \think\Config::get('mongodb.user') .':'. urlencode(\think\Config::get('mongodb.password')) .'@'. \think\Config::get('mongodb.host') .':'. \think\Config::get('mongodb.port') .'/'. \think\Config::get('mongodb.database'));
            // MongoDB 如果需要用户名密码验证，则必须把它们去掉；如果留着像这样：mongodb://:@host:port...，是不行的。
            $mongoInstance = new \MongoDB\Driver\Manager('mongodb://'. \think\Config::get('mongodb.host') .':'. \think\Config::get('mongodb.port') .'/'. \think\Config::get('mongodb.database'));
            self::$mongoIns = $mongoInstance;
            return $mongoInstance;
        } else {
            return self::$mongoIns;
        }
    }
}